4.1.9.4 希尔排序 (不稳定排序)

  • 时间复杂度: O(n)(根据步长序列的不同而不同)
  • 空间复杂度: O(n)

思想:优先比较距离较远的元素,核心在于间隔序列的设定

var arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 04];
var len = arr.length;
for (var fraction = Math.floor(len / 2); fraction > 0; fraction = Math.floor(fraction / 2)) {
    for (var i = fraction; i < len; i++) {
        for (var j = i - fraction; j >= 0 && arr[j] > arr[fraction + j]; j -= fraction) {
            var temp = arr[j];
            arr[j] = arr[fraction + j];
            arr[fraction + j] = temp;
        }
    }
}
console.log(arr);
1
2
3
4
5
6
7
8
9
10
11
12
  • demo
[13,14,93,33,82,25,94,65,23]

设置步长 5 
比较 13 和 25 ,13 < 25 不换位置
比较 14 和 94, 14 < 65 不换位置
比较 93 和 23 , 93 > 23 换位置
比较 82 

这时候第一次后:   13 14 65 23 82 25 94 93 33

再设置步长为 3 

比较 13 和 23
比较 14 和 82
 65  和 25 
 ....



再设置步长为 1


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

参考